﻿<?php
	/*

	 分类编辑的递归
*/
	function editCate($data,$cate=array()){//$data把查到的当前修改的分类整个传进来
		//print_r($data);die;
	/*	$pid=$data['pid'];//先获取当前分类的pid
		//查找当前分类
		$sql="select * from `cate` where pid=$pid";
		$result=mysqli_query($GLOBALS['link'],$sql);
		//循环将查询到的同级存储到重组数组中
		while ($arr=mysqli_fetch_assoc($result)) {
			//$cate[$arr['pid']][]=$arr;//将查询到同级数据存储到临时数组中
			$cate[$data['id']][]=$arr;//$data当前分类的数据的id。[$data['id']]对应的下标是二维数组
			//print_r($cate);die;
		}
		//print_r($cate);die;
		//如果没有找到顶级才去找父级
		if ($pid!=0) {
				//找父级
				$sql="select * from `cate` where id=$pid";
				//执行
				$result=mysqli_query($GLOBALS['link'],$sql);
				//获取数据
				$data=mysqli_fetch_assoc($result);
				//print_r($data);die;
				//调用自身找父级的同级
				//$cate=editCate($data['pid'],$cate);
				$cate=editCate($data,$cate);
		}
		//return $cate;//当找不到的时候，返回
		return $cate=array_reverse($cate,true);*/

		//首先查询到的是子级,循环了子级之后再查询父级，直至查询到顶级分类，循环结束
		do{
			$pid=$data['pid'];
			$lists[$data['id']]=getSelect('cate',"pid=$pid");//查询同级
			$data=getSelectByOne('cate',"id=$pid");//查询父级
		}while ( $pid!=0);//当pid！=0的时候，表示循环没有结束，他还没有查询到顶级分类
		return array_reverse($lists,true);//数组倒序输出,true表示在对数组进行排序的时候保留原来的下标，不能少，否则会被替换掉，从而查询不到数据
	}

	/*

	 分类列表的递归
*/
function getCate($pid=0,$cate=array(),$level=0){//$cate=array()贯穿整个递归算法的数组，用来存储重组的数据结构
		$sql="select * from `cate` where pid=$pid";
		$result=mysqli_query($GLOBALS['link'], $sql);
		while ($arr=mysqli_fetch_assoc($result)) {
			$str='';
			//根据等级的值循环对应等级的l-
			for ($i=0; $i <$level ; $i++) {
				$str.='l-';
			}
			$arr['name']=$str.$arr['name'];//将l-和原来的没错进行拼接，然后替换掉原来的名称


			//平级
			$cate[]=$arr;
			$cate=getCate($arr['id'],$cate,$level+1);//$level+1根据查找的次数增加等级的次数

			//菜单实现
			//$cate[]=getCate($arr['id'],$arr,$level+1);//$level+1根据查找的次数增加等级的次数
		}
		return $cate;
	}




//权限
//编辑
function editPower($data,$cate=array()){
		//首先查询到的是子级,循环了子级之后再查询父级，直至查询到顶级分类，循环结束
		do{
			$pid=$data['pid'];
			$lists[$data['id']]=getSelect('power',"pid=$pid");//查询同级
			$data=getSelectByOne('cate',"id=$pid");//查询父级
		}while ( $pid!=0);//当pid！=0的时候，表示循环没有结束，他还没有查询到顶级分类
		return array_reverse($lists,true);//数组倒序输出,true表示在对数组进行排序的时候保留原来的下标，不能少，否则会被替换掉，从而查询不到数据
	}








?>